[急求]采用堆排序法将元素按由小到大进行排序的程序

来源:百度知道 编辑:UC知道 时间:2024/06/09 09:17:04
假设有一个数据类型为整型的一维数组A,A 中的数据元素呈无序状态,编写一个采用堆排序法将A中的数据元素按由小到大进行排序的程序。
麻烦高手们用c实现,谢谢了

【堆排序程序】
program heap_sort;
const maxn=10000;
var a:array[1..maxn]of integer;
n,i,t:integer;
{以2i为、2i+1为根的子树已是最大堆,将以i为根的子树调整为最大堆}
procedure shift_down(i,n:integer);
var j:integer;
begin
while i<=n div 2 do begin
j:=i+i;
if (j+1<=n) and (a[j]<a[j+1]) then j:=j+1;
if a[i]<a[j] then begin
t:=a[i];a[i]:=a[j];a[j]:=t;
i:=j;
end
else break;
end;
end;
begin{主程序}
read(n);for i:=1 to n do read(a[i]);readln;{输入}
for i:=n div 2 downto 1 do shift_down(i,n);{建堆}
for i:=n downto 2 do begin{堆排序}
t:=a[1];a[1]:=a[i];a[i]:=t;{交换a[1]与a[i]}
shift_down(1,i-1);{将a[1]向下交换,使a[1..i-1]成为堆}
end;
write(a[1]);for i:=2 to n do write(' ',a[i]);writeln;{输出}
end.